/*
 * leeSocket.c
 *
 *  Created on: 17/11/2011
 *      Author: ${Petris-Normandia}
 */

#include "DiscPlanning.h"


void leeSocket(int socket) {

	T_MENSAJE *mensaje;
	T_MENSAJE *respuesta;
	tregCHS regfis;


	if(recibirDeSocket(socket, &mensaje)) {
		if (parametros->log==1)
		log("Planificador de Disco","log.txt","ERROR","Error al recibir de socket\n");
		return;
	}

	switch(mensaje->tipo){

		case TIPO_HANDSHAKE:
			if(!strcmp(parametros->modoInicio,"listen")){
				// Recibió un handshake, devuelve un handshake
				respuesta = generarMensaje(TIPO_HANDSHAKE,0, NULL);
				if(enviarPorSocket(socket,respuesta)) {
					if (parametros->log==1)
					log("Planificador de Disco","log.txt","ERROR","Error al responder handshake\n");
				}
			}
			break;


		case TIPO_END_SINCRO:
				msync(princArchivo,Size_Disk,MS_SYNC);
			break;

		default:
			tratarmsj(mensaje,&regfis);
			traducirPedido(&regfis);
			regfis.socket=socket;
			if (parametros->log==1){
				char aux[70];
				if(regfis.modo==TIPO_READSECTOR){
						sprintf(aux,"Llegada de pedido de lectura: %u",regfis.ped_log);
						log("Planificador de Disco","log.txt","INFO",aux);
				}
				else{
					sprintf(aux,"Llegada de pedido de escritura: %u",regfis.ped_log);
					log("Planificador de Disco","log.txt","INFO",aux);
				}
			}
			if (strcmp(parametros->algoritmo,"fscan")==0){
				meterPila(&pilaFscan, regfis);
				fScan(&pilaFscan);
				}
				else
				cLook(regfis);

			break;
	}

}
